package ch.ifage.business.service;

import java.util.Date;
import java.util.List;

import ch.ifage.business.dom.Assureur;
import ch.ifage.business.dom.Client;
import ch.ifage.business.dom.Police;
import ch.ifage.business.dom.Sinistre;
import ch.ifage.business.interceptors.Secure;
/**
 * Definit le contrat de service d'un courtier en assurance.
 * @author Betty Ba
 *
 */
public interface ServiceCourtier {
	/** * @return tous les clients enregistres. */
	@Secure(roles = { "courtier" })
	List<Client> getTousLesClients();
	/** * @return tous les assureurs enregistres. */
	@Secure(roles = { "courtier" })
	List <Assureur> getTousLesAssureurs();
	/** * @return toutes les polices enregistrees. */
	@Secure(roles = { "courtier" })
	List <Police> getToutesLesPolices();
	/** * @return tous les sinistres enregistres */
	@Secure(roles = { "courtier" })
	List <Sinistre> getTousLesSinistres();
	/** * @param client
	 *    ajouter un client.*/
	void ajouter(Client client);
	/** * @param assureur
	 *    ajouter un assureur.*/
	void ajouter(Assureur assureur);
	/** * @param police
	 *    ajouter une police.*/
	void ajouter(Police police);
	/** * @param sinistre
	 *    ajouter un sinistre.*/
	void ajouter(Sinistre sinistre);
	/** * @param client
	 *    supprimer un client.*/
	void supprimer(Client client);
	/** * @param assureur
	 *    supprimer un assureur.*/
	void supprimer(Assureur assureur);
	/** * @param police
	 *    supprimer une police.*/
	void supprimer(Police police);
	/** * @param sinistre
	 *    supprimer un sinistre.*/
	void supprimer(Sinistre sinistre);
	/** * @return toutes les polices d un client en particulier. */
	List<Police> getPolicesDuClient();
	/** * @param client dont on veut la liste des polices.*/
	void setPolicesDuClient(Client client);
	/** * @param client a modifier.*/
	void modifier(Client client);
	/** * @return tous les clients trouves par un critère de recherche. */
	List<Client> getClientsTrouves();
	/** * @param clientNouvelleRaisonSociale
	 *  valeur qui modifie la raison sociale d un client.*/
	void setClientNouvelleRaisonSociale(String clientNouvelleRaisonSociale);
	/** * @param clientNouveauDomaineActivite 
	 * valeur qui modifie le domaine d'activite d un client.*/
	void setClientNouveauDomaineActivite(String clientNouveauDomaineActivite);
	/** * @param clientNouveauResponsable 
	 * valeur qui modifie le nom du responsable d un client.*/
	void setClientNouveauResponsable(String clientNouveauResponsable);
	/** * @param clientNouvelleAdresse 
	 * valeur qui modifie l'adresse d un client.*/
	void setClientNouvelleAdresse(String clientNouvelleAdresse);
	/** * @param clientNouveauTelephone 
	 * valeur qui modifie le numero de telephone d un client.*/
	void setClientNouveauTelephone(String clientNouveauTelephone);
	/** * @param clientNouvelEmail 
	 * valeur qui modifie l'email d un client.*/
	void setClientNouvelEmail(String clientNouvelEmail);
	/** * @param assureurNouvelleRaisonSociale
	 *  valeur qui modifie la raison sociale d un assureur.*/
	void setAssureurNouvelleRaisonSociale(String assureurNouvelleRaisonSociale);
	/** * @param assureurNouvelleAdresse
	 *  valeur qui modifie l'adresse d un assureur.*/
	void setAssureurNouvelleAdresse(String assureurNouvelleAdresse);
	/** * @param assureurNouveauResponsable
	 *  valeur qui modifie le nom du responsable d un assureur.*/
	void setAssureurNouveauResponsable(String assureurNouveauResponsable);
	/** * @param mAssureurNouveauTelephone
	 *  valeur qui modifie le numero de telephone d un assureur.*/
	void setAssureurNouveauTelephone(String mAssureurNouveauTelephone);
	/** * @param assureur
	 *  a modifier.*/
	void modifier(Assureur assureur);
	/** * @param mAssureurNouvelEmail
	 *  valeur qui modifie l email d un assureur.*/
	void setAssureurNouvelEmail(String mAssureurNouvelEmail);
	/** * @param assureur
	 *  dont on veut la liste des polices.*/
	void setPolicesAssureur(Assureur assureur);
	/** * @return les polise d'un assureur particulier. */
	List<Police> getPolicesAssureur();
	/** * @param polieNouveauNumero
	 *  valeur qui modifie le numero de police.*/
	void setPoliceNouveauNumero(String polieNouveauNumero);
	/** * @param policeNouvelleDateDebut
	 *  valeur qui modifie la date d'entree de police.*/
	void setPoliceNouvelleDateDebut(Date policeNouvelleDateDebut);
	/** * @param policeNouvelleDateFin
	 *  valeur qui modifie la date d'echeance de police.*/
	void setPoliceNouvelleDateFin(Date policeNouvelleDateFin);
	/** * @param nouvellePrime
	 *  valeur qui modifie la prime d une police.*/
	void setNouvellePrime(double nouvellePrime);
	/** * @param police
	 *  a modifier.*/
	void modifier(Police police);
	/** * @param sinistreNouveauNumero
	 *  valeur qui modifie le numero de sinistre.*/
	void setSinistreNouveauNumero(String sinistreNouveauNumero);
	/** * @param sinistreNouvelleDateDebut
	 *  valeur qui modifie la date de debut d un sinistre.*/
	void setSinistreNouvelleDateDebut(Date sinistreNouvelleDateDebut);
	/** * @param sinistreNouvelleDateFin
	 *  valeur qui modifie la date de fin d un sinistre.*/
	void setSinistreNouvelleDateFin(Date sinistreNouvelleDateFin);
	/** * @param nouvelleIndemnite
	 *  valeur qui modifie le montant de l indemnite d un sinistre.*/
	void setNouvelleIndemnite(double nouvelleIndemnite);
	/** * @param nouveauNom
	 *  valeur qui modifie le nom d une personne sinistree.*/
	void setNouveauNom(String nouveauNom);
	/** * @param nouveauPrenom
	 *  valeur qui modifie le prenom d une personne sinistree.*/
	void setNouveauPrenom(String nouveauPrenom);
	/** * @param sinistre
	 *  a modifier.*/
	void modifier(Sinistre sinistre);
	/** * @param 
	 *  a reinitialise le champs de recherche d un client en le rendant null.*/
	void annuleRechercheClient();
	/** * @return tous les assureurs trouves selon un critere de recherche. */
	List<Assureur> getAssureursTrouves();
	/** * @param 
	 *  a reinitialise le champs de recherche d un assureur en le rendant null.*/
	void annuleRechercheAssureur();
	/** * @return toutes les polices trouvees selon un critere de recherche. */
	List<Police> getPolicesTrouvees();
	/** * @param 
	 *  a reinitialise le champs de recherche d une police en le rendant null.*/
	void annuleRecherchePolice();
	/** * @return toutes les sinistres trouves selon un critere de recherche. */
	List<Sinistre> getSinistresTrouves();
	/** * @param 
	 *  a reinitialise le champs de recherche d un sinistre en le rendant null.*/
	void annuleRechercheSinistre();
	/** * @return tous les sinistres d'une police particuliere. */
	List<Sinistre> getSinistresPolice();
	/** * @return toutes les polices selon l id d un client. */
	List<Police> getPolicesDuClientId();
	/** * @param 
	 *  a reinitialise le champs de recherche d une police selon l id client en le rendant null.*/
	void annuleRecherchePolicesClientId();
	/** * @param police
	 *  dont on veut les sinistres.*/
	void setSinistresPolice(Police police);
	/** * @return tous les sinistres d'une police particuliere. */
	List<Sinistre> getSinistresPolice(Police police);
	/** * @return toutes les polices selon l id d un assureur. */
	List<Police> getPolicesAssureurId();
	/** * @param 
	 *  a reinitialise le champs de recherche d une police selon l id assureur en le rendant null.*/
	void annuleRecherchePolicesAssureurId();
}
